home *** CD-ROM | disk | FTP | other *** search
- ; * ************************************************************************ *
- ; * Module : SP_AsmPart.a *
- ; * Version : V4.5 - V2 *
- ; * Last updated : 27.05.1996 *
- ; * Includes : NDUK V40 asm includes *
- ; * Compiler : SAS/C V6.56 (ASM) *
- ; * Compiler-Options : (smakefile) *
- ; * ************************************************************************ *
-
- INCLUDE "exec/types.i"
- INCLUDE "exec/execbase.i"
- INCLUDE "exec/initializers.i"
- INCLUDE "exec/libraries.i"
- INCLUDE "exec/resident.i"
- INCLUDE "exec/funcdef.i"
- INCLUDE "exec/exec_lib.i"
-
- XREF _LinkerDB
-
-
- XREF _SPLI_InitSPOList ; library-internal initialization function
- XREF _SPLI_OpenLibs
- XREF _SPLI_CloseLibs
- XREF _SysBase
- XREF _DataTab
-
- XREF _SPO_AllocHandle
- XREF _SPO_FreeHandle
-
- XREF _SPO_StartReplay
- XREF _SPO_Read
- XREF _SPO_Write
- XREF _SPO_StopReplay
- XREF _SPO_FreeResources
- XREF _SPO_SetAccessMode
- XREF _SPO_SetWriteSubType
- XREF _SPO_SetWriteName
- XREF _SPO_SetReadName
- XREF _SPO_FileInfoRequest
- XREF _SPO_CheckFileType
- XREF _SPO_SetReqIOWindow
- XREF _SPO_ContinueReplay
- XREF _SPO_FastForward
- XREF _SPO_FastBackward
- XREF _SPO_GetSampleBuffer
- XREF _SPO_GetSampleInfo
- XREF _SPO_GetSampleList ; added in V2
- XREF _SPO_SetSampleList
-
-
- STRUCTURE SPObjectBase,0
- STRUCT svb_LibNode,LIB_SIZE
- ULONG svb_SPObject
-
- ULONG svb_Reserved,32
-
- ULONG svb_SegList ; private part of Base Data
- ULONG svb_SysBase
- ULONG svb_DOSBase
- ULONG svb_IntuitionBase
- ULONG svb_IFFParseBase
- LABEL svb_SIZEOF
-
- SECTION svb_lib,CODE
- ;-------------- `Notausgang` ------------------------------------------------
- Start: moveq #0,d0
- rts
-
- ;-------------- Funktionstabellen fuer InitStruct u.a. ----------------------
- _InitTab:
- dc.l svb_SIZEOF ; LibBase-Size
- dc.l FuncTab ; Function-Table begin
- dc.l _DataTab ; Data-Table begin
- dc.l InitLib ; ptr to InitLib
- FuncTab:
- dc.l OpenLib ; internal functions
- dc.l CloseLib
- dc.l ExpungeLib
- dc.l ExtFuncLib
-
- dc.l _SPO_AllocHandle
- dc.l _SPO_FreeHandle
- dc.l _SPO_Read
- dc.l _SPO_StartReplay
- dc.l _SPO_Write
- dc.l _SPO_StopReplay
- dc.l _SPO_FreeResources
- dc.l _SPO_SetAccessMode
- dc.l _SPO_SetWriteSubType
- dc.l _SPO_SetWriteName
- dc.l _SPO_SetReadName
- dc.l _SPO_FileInfoRequest
- dc.l _SPO_CheckFileType
- dc.l _SPO_SetReqIOWindow
- dc.l _SPO_ContinueReplay
- dc.l _SPO_FastForward
- dc.l _SPO_FastBackward
- dc.l _SPO_GetSampleBuffer
- dc.l _SPO_GetSampleInfo
- dc.l _SPO_GetSampleList ; added in V2
- dc.l _SPO_SetSampleList
-
- dc.l -1
-
- ;-------------- InitLib (Initialisieren der Library) ---------------------------
- ; A0 : &SegList
- ; A6 : &SysBase
- ; D0 : &SVLibrary
-
- InitLib:
- movem.l a1/a4-a5,-(sp) ; a4 und a5 auf Stack retten
-
- lea _LinkerDB,a4 ; _LinkerDB -> A4
- move.l d0,a5 ; &SVLibrary -> A5
-
- move.l a6,svb_SysBase(a5) ; &SysBase -> SVLibrary.svb_SysBase
- move.l a0,svb_SegList(a5) ; &SegList -> SVLibrary.svb_SegList
- move.l a5,_SPObjectBase ; save Base Address for internal use
-
- jsr _SPLI_OpenLibs
-
- tst.l d0
- beq InitLib_Fail
-
- jsr _SPLI_InitSPOList
-
- move.l a5,d0 ; return &SPObjectBase
-
- jmp InitLib_RTS
-
- InitLib_Fail:
-
- jsr _SPLI_CloseLibs
- moveq #0,d0 ; NULL !
-
- InitLib_RTS:
-
- movem.l (sp)+,a1/a4-a5
- rts
-
-
- ;-------------- OpenLib (Oeffnen der Library) ----------------------------------
- OpenLib:
- addq.w #1,LIB_OPENCNT(a6) ; LIB_OPENCNT ++
- bclr #LIBB_DELEXP,LIB_FLAGS(a6) ; clear LIBF_DELEXP
- move.l a6,d0 ; return &SPObjectBase
-
- rts
-
- ;-------------- CloseLib (Schliessen der Library) ------------------------------
- CloseLib:
- moveq #0,d0
- subq.w #1,LIB_OPENCNT(a6) ; LIB_OPENCNT --
- bne.s EndCloseLib ; wenn nicht null, Abbruch
- btst #LIBB_DELEXP,LIB_FLAGS(a6) ; Test auf LIBF_DELEXP
- beq.s EndCloseLib ; wenn Null, Abbruch
- bsr.s ExpungeLib ; wenn gesetzt, ExpungeLib
- EndCloseLib:
- rts
-
- ;-------------- ExpungeLib (Entfernen der Library) ----------------------------
- ExpungeLib:
- movem.l d2/a1/a5-a6,-(sp)
-
- move.l a6,a5 ; &SVLibrary retten
- move.l _SysBase,a6 ; ExecBase to A6
- tst.w LIB_OPENCNT(a5) ; test LIB_OPENCNT
- beq.s NoOpenLib ; ...
- bset #LIBB_DELEXP,LIB_FLAGS(a5) ; set LIBF_DELEXP flag
- moveq #0,d0 ; Ptr auf Segmentliste
- bra.w ExpungeLibEnd ;
- NoOpenLib:
- move.l svb_SegList(a5),d2 ; SegList retten
-
- move.l a5,a1 ; &SVLibrary nach A1 (Par.)
- jsr _LVORemove(a6) ; Library-Node entfernen
-
- jsr _SPLI_CloseLibs
-
- moveq #0,d0 ; D0 loeschen
- move.l a5,a1 ; &SVLibrary nach A1 (Par.)
- move.w LIB_NEGSIZE(a5),d0 ; Groesse der
- sub.l d0,a1 ; Library
- add.w LIB_POSSIZE(a5),d0 ; ermitteln !!!
-
- jsr _LVOFreeMem(a6) ; Speicher freigeben
- move.l d2,d0 ; &SegList zurueckgeben
- ExpungeLibEnd:
- movem.l (sp)+,d2/a1/a5-a6
- rts
-
- ;-------------- ExtFuncLib (bis einschl. OS V2.04 unbenutzt) ---------------
- ExtFuncLib:
-
- moveq #0,d0 ; Ist nie falsch ........ - oder ?
- rts
-
- ;-------------- Eigene Funktionen ------------------------------------------
-
- SECTION __MERGED,BSS
-
- _SPObjectBase: ds.l 1
-
- _XCEXIT: ds.l 1 ; dummy-values to get the compiler's libs work :
- __XCEXIT: ds.l 1
- _ONBREAK: ds.l 1
- __ONBREAK: ds.l 1
- __base: ds.l 1
- ___base: ds.l 1
- _ProgramName: ds.l 1
- __ProgramName: ds.l 1
- _StackPtr: ds.l 1
- __StackPtr: ds.l 1
- _oserr: ds.l 1
- __oserr: ds.l 1
- _OSERR: ds.l 1
- __OSERR: ds.l 1
-
- XDEF _SPObjectBase
- XDEF _InitTab
-
- XDEF _XCEXIT
- XDEF __XCEXIT
- XDEF _ONBREAK
- XDEF __ONBREAK
- XDEF __base
- XDEF ___base
- XDEF _ProgramName
- XDEF __ProgramName
- XDEF _StackPtr
- XDEF __StackPtr
- XDEF _oserr
- XDEF __oserr
- XDEF _OSERR
- XDEF __OSERR
- END
-